class CustomError extends Error{
    constructor(err, actionName) {
        super()
        this.name = "CustomError"; //错误类型
        this.actionName = actionName; //调用函数名
        this.errMsg = ""; //错误信息
        this.errCode = -1; //错误编码
        this.set(err);
    }
    set (err) { //对err 类型判断
        if (Object.prototype.toString.call(err) === "[object Object]") { //是对象 则直接拉平属性值
            let {actionName} = err;
            let currentActionName = this.actionName;
            Object.assign(this, err);
            this.actionName = actionName ? (currentActionName ? actionName + " ---> " + currentActionName : "") : currentActionName;
        } else if (Object.prototype.toString.call(err) === "[object Error]") { //参数是Error实例 则覆盖实例的熟悉
            let {actionName} = err;
            let currentActionName = this.actionName;
            this.name = err.name;
            this.actionName = actionName ? (currentActionName ? actionName + " ---> " + currentActionName : "") : currentActionName;
            this.errMsg = err.message || err.errMsg;
            this.errCode = err.errCode || err.errorCode;; //错误编码
            this.stack = err.stack;
        } else { //字符串 或者 其它
            this.errMsg = err
        }
    }
    parse () { //返回对象
        return {
            name: this.name,
            actionName: this.actionName,
            errMsg: this.errMsg || this.message,
            errCode: this.errCode
        }
    }
}

module.exports = CustomError